/**
 * validate_helper.js
 * PLM项目专用表单验证工具
 */

// 导入常用工具函数
const helper = require('./helper');

/**
 * 验证工具模块
 */
const validateHelper = {
  /**
   * 验证是否为数字
   * @param {*} val - 要验证的值
   * @returns {boolean} 是否为数字
   */
  isNumber: function(val) {
    if (!helper.isDefined(val)) return false;
    return !isNaN(Number(val));
  },
  
  /**
   * 验证是否为空
   * @param {*} val - 要验证的值
   * @returns {boolean} 是否为空
   */
  isEmpty: function(val) {
    // 直接使用helper的isEmpty
    return helper.isEmpty(val);
  },
  
  /**
   * 验证是否为数组
   * @param {*} val - 要验证的值 
   * @returns {boolean} 是否为数组
   */
  isArray: function(val) {
    return Array.isArray(val);
  },
  
  /**
   * 验证是否为对象
   * @param {*} val - 要验证的值
   * @returns {boolean} 是否为对象
   */
  isObject: function(val) {
    return val !== null && typeof val === 'object' && !Array.isArray(val);
  },
  
  /**
   * 验证是否为字符串
   * @param {*} val - 要验证的值
   * @returns {boolean} 是否为字符串
   */
  isString: function(val) {
    return typeof val === 'string';
  },
  
  /**
   * 验证是否为布尔值
   * @param {*} val - 要验证的值
   * @returns {boolean} 是否为布尔值
   */
  isBoolean: function(val) {
    return typeof val === 'boolean';
  },
  
  /**
   * 验证是否为函数
   * @param {*} val - 要验证的值
   * @returns {boolean} 是否为函数
   */
  isFunction: function(val) {
    return typeof val === 'function';
  },
  
  /**
   * 验证是否为有效日期
   * @param {*} val - 要验证的值
   * @returns {boolean} 是否为有效日期
   */
  isDate: function(val) {
    if (!val) return false;
    const date = new Date(val);
    return !isNaN(date.getTime());
  },
  
  /**
   * 验证是否为手机号
   * @param {string} val - 要验证的值
   * @returns {boolean} 是否为手机号
   */
  isMobile: function(val) {
    if (!this.isString(val)) return false;
    return /^1[3-9]\d{9}$/.test(val);
  },
  
  /**
   * 验证是否为邮箱
   * @param {string} val - 要验证的值
   * @returns {boolean} 是否为邮箱
   */
  isEmail: function(val) {
    if (!this.isString(val)) return false;
    return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(val);
  },
  
  /**
   * 验证字符串长度是否在指定范围内
   * @param {string} val - 要验证的字符串
   * @param {number} min - 最小长度
   * @param {number} max - 最大长度
   * @returns {boolean} 是否在范围内
   */
  checkLength: function(val, min, max) {
    if (!this.isString(val)) return false;
    
    const len = val.length;
    
    if (min !== undefined && len < min) return false;
    if (max !== undefined && len > max) return false;
    
    return true;
  },
  
  /**
   * 验证数字是否在指定范围内
   * @param {number} val - 要验证的数字
   * @param {number} min - 最小值
   * @param {number} max - 最大值
   * @returns {boolean} 是否在范围内
   */
  checkNumber: function(val, min, max) {
    if (!this.isNumber(val)) return false;
    
    const num = Number(val);
    
    if (min !== undefined && num < min) return false;
    if (max !== undefined && num > max) return false;
    
    return true;
  },
  
  /**
   * 验证必填项
   * @param {*} val - 要验证的值
   * @returns {boolean} 是否通过验证
   */
  required: function(val) {
    return !this.isEmpty(val);
  },
  
  /**
   * 验证日期格式
   * @param {string} val - 要验证的日期字符串
   * @param {string} format - 期望的格式 (目前仅支持简单判断)
   * @returns {boolean} 是否为有效日期格式
   */
  checkDateFormat: function(val, format) {
    if (!this.isString(val)) return false;
    
    // 简单格式判断
    switch (format.toUpperCase()) {
      case 'YYYY-MM-DD':
        return /^\d{4}-\d{2}-\d{2}$/.test(val);
      case 'YYYY/MM/DD':
        return /^\d{4}\/\d{2}\/\d{2}$/.test(val);
      case 'YYYY-MM-DD HH:MM:SS':
        return /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(val);
      default:
        return this.isDate(val);
    }
  }
};

// 导出模块
module.exports = validateHelper; 